<?php
namespace Swiftx\Interfaces\Orm;
use PDO;
/**
 * 对象查询器接口
 *
 * @author		Hismer <odaytudio@gmail.com>
 * @since		2017-05-09
 * @copyright	Copyright (c) 2014-2017 Swiftx Inc.
 * @default-implement Swiftx\Component\Orm\Statement\Query singleton=false
 */
interface Query {

    /**
     * 构造函数
     * @param Manager $manager
     * @param string $namespace
     * @param string[] $uses
     */
    public function __construct(Manager $manager, string $namespace, array $uses=[]);

    /**
     * 设置SQL语句
     * @param string $sql
     */
    public function setSql(string $sql);

    /**
     * 设置查询名称
     * @param string $name
     */
    public function setName(string $name);

    /**
     * 查看名称
     * @return string
     */
    public function getName():string;

    /**
     * 设置严格模式
     * @param string $mode
     */
    public function setStrict(string $mode);

    /**
     * 设置连接实例
     * @param PDO $connect
     */
    public function setConnect(PDO $connect);

    /**
     * 设置实体类名
     * @param string $className
     */
    public function setEntity(string $className);

    /**
     * 绑定查询参数
     * @param string $key
     * @param $value
     */
    public function bind(string $key, $value);

    /**
     * 获取查询对象
     * @param int $offset
     * @return Entity
     */
    public function fetch(int $offset = 0):Entity;

    /**
     * 获取查询结果集
     * @param int $number
     * @param int $offset
     * @return array|Entity[]
     */
    public function list(int $number = 0, int $offset = 0):array;

    /**
     * 获取图片集合
     * @param int $current
     * @param int $number
     * @param bool $sync
     * @return Pager
     */
    public function page(int $current, int $number, bool $sync=true):Pager;

    /**
     * 统计查询记录数
     * @return int
     */
    public function count():int;

}